Typically, because of the high transmission rates required by high performance networks (e.g., 10 Gigabits per second or greater) and the high computational overhead required by traffic conditioning and transmit scheduling, these functions are implemented in dedicated hardware. Such hardware implementations cannot be easily scaled or adapted to accommodate new scheduling algorithms and quality of service standards.
Programmable software-based approaches, by nature more adaptable to changing implementations and evolving standards, are not without problems, however. At present, software implementations require that the transmit scheduler maintain queue status information (sometimes in the form of bit vectors in external memory) for transmit queues. The queue status is read by a transmit scheduler and updated by another process that processes enqueue and dequeue requests (often referred to as a queue manager). The timing of these operations can cause a race condition in which the transmit scheduler reads a queue status modified by the queue manager before the value of that queue status has been changed. Consequently, the transmit scheduler generates dequeue requests for empty queues (“false dequeuing”), resulting in lost bandwidth and wasted scheduling time slots. Moreover, the time required for the reads and writes to the queue status makes it difficult to meet line rates.